package com.demo.linkList.doubleLinkList;
public class DoubleLinkList {

    private static Node head = new Node(0, "头节点");

    /**
     * 打印链表
     */
    public void showNode() {
        Node temp = head.getNextNode();
        if (temp == null) {
            System.out.println("链表为空");
            return;
        }
        while (true) {
            System.out.println(temp);
            if (temp.getNextNode() == null) {
                break;
            }
            temp = temp.getNextNode();
        }
    }

    /**
     * 添加节点
     * @param node
     */
    public void addNode(Node node) {
        Node temp = head;
        while (true) {
            if (temp.getNextNode() == null) {
                break;
            }
            temp = temp.getNextNode();
        }
        temp.setNextNode(node);
        node.setPreNode(temp);
    }

    /**
     * 按顺序插入
     * @param node
     */
    public void addNodeSort(Node node) {
        Node temp = head;
        while (true) {
            if (temp.getNo() == node.getNo()) {
                System.out.println("节点已存在：" + node.getNo());
                return;
            }
            // 当前节点比新插入的节点大，需要把新节点放到旧节点前面
            if (temp.getNo() > node.getNo()) {
                node.setPreNode(temp.getPreNode());
                temp.getPreNode().setNextNode(node);
                temp.setPreNode(node);
                node.setNextNode(temp);
                return;
            }
            // 最后一个节点
            if (temp.getNextNode() == null) {
                temp.setNextNode(node);
                node.setPreNode(temp);
                return;
            }
            temp = temp.getNextNode();
        }
    }

    /**
     * 修改节点内容
     * @param node
     */
    public void updateNode(Node node) {
        Node temp = head;
        boolean isExist = false;
        while (true) {
            // 未找到要修改的节点
            if (temp == null) {
                break;
            }
            if (temp.getNo() == node.getNo()) {
                isExist = true;
                break;
            }
            temp = temp.getNextNode();
        }
        if (isExist) {
            temp.setName(node.getName());
        } else {
            System.out.println("节点未找到");
        }
    }

    /**
     * 删除节点
     * @param no
     */
    public void deleteNode(Integer no) {
        Node temp = head;
        while (true) {
            if (temp == null) {
                System.out.println("节点未找到");
                return;
            }
            if (temp.getNo() == no) {
                // 删除的是最后一个节点
                if (temp.getNextNode() == null) {
                    temp.getPreNode().setNextNode(null);
                    temp.setPreNode(null);
                    return;
                } else {
                    temp.getPreNode().setNextNode(temp.getNextNode());
                    temp.getNextNode().setPreNode(temp.getPreNode());
                    return;
                }
            }
            temp = temp.getNextNode();
        }
    }
}
